package singleton;

import dao.CompraDAO;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.Lock;
import javax.ejb.LockType;
import javax.ejb.Singleton;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import model.Compra;

@Singleton
public class CompraControle implements CompraControleRemote {

    private CompraDAO compraDAO;

    //Esta funcionalidade só pode ser usada em uma EJB
    @PersistenceContext
    private EntityManager em;

    //Precisa deste método para que o EntityManager esteja instanciado antes de
    //ser passado como parâmetro para a classe DAO
    @PostConstruct
    private void init() {
        compraDAO = new CompraDAO(em);
    }

    /**
     * Efetua compra
     * @param compra Envie a compra já montada - com seus itens
     * @param cartao Envie os dados do cartão
     * @return String vazia quando foi sucesso. Mensagem de erro para não autorização de cartão ou não estoque
     **/
    @Lock(LockType.WRITE)
    public boolean verificaEstoque(Compra compra) {
        System.out.println("Verificando estoque...");
        try {
            return compraDAO.verificaEstoque(compra);
        } catch (Exception ex) {
            Logger.getLogger(CompraControle.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }

//    private void autorizarCompra(Compra compra, Cartao cartao) throws Exception {
//        WebServiceCartao servicoCartao = new WebServiceCartao();
//        servicoCartao.autorizar(cartao, compra.getValor());
//    }
//
//    public List<String> consultarComprasCartao(String nome) {
//        WebServiceCartao servicoCartao = new WebServiceCartao();
//        return servicoCartao.consultar(nome);
//        return null;
//    }
}
